package main

import "fmt"

type AInterface interface {
	Say()
}

type BInterface interface {
	Hello()
}

type ABInterface interface {
	AInterface
	BInterface
	Add()
}

type Integer int

func (i Integer) Say() {
	fmt.Println("Say", i)
}

type AStruct struct {
	Name string
}

func (a AStruct) Say() {
	fmt.Println("AStruct Say()")
}

func (a AStruct) Hello() {
	fmt.Println("AStruct Hello()")
}

func (a AStruct) Add() {
	fmt.Println("AStruct Add()")
}

type T interface {
}

func main() {
	var a = AStruct{Name: "asd"}
	var ai AInterface = a
	ai.Say()
	var i Integer = 1
	var ai2 AInterface = i
	ai2.Say()
	var bi BInterface = a
	bi.Hello()
	var abi ABInterface = a
	abi.Add()
	abi.Say()
	abi.Hello()
	var t1 T = a
	var num1 float64 = 1.2
	var t2 interface{} = num1
	fmt.Println(t1, t2)
}
